if handler.store_mfn is None or handler.console_mfn is None:
raise XendError('Could not read store/console MFN')
+ #Block until src closes connection
+ os.read(fd, 1)
dominfo.unpause()
-
+
dominfo.completeRestore(handler.store_mfn, handler.console_mfn)
-
+
return dominfo
except:
dominfo.destroy()
sock.send("receive\n")
sock.recv(80)
XendCheckpoint.save(sock.fileno(), dominfo, True, live, dst)
-
+ dominfo.testDeviceComplete()
+ sock.close()
def domain_save(self, domid, dst):
"""Start saving a domain to file.
if rc != 0:
raise XendError("Device of type '%s' refuses migration." % n)
+ def testDeviceComplete(self):
+ """ For Block IO migration safety we must ensure that
+ the device has shutdown correctly, i.e. all blocks are
+ flushed to disk
+ """
+ while True:
+ test = 0
+ for i in self.getDeviceController('vbd').deviceIDs():
+ test = 1
+ log.info("Dev %s still active, looping...", i)
+ time.sleep(0.1)
+
+ if test == 0:
+ break
+
def migrateDevices(self, network, dst, step, domName=''):
"""Notify the devices about migration
"""